# -*- coding: utf-8 -*-
"""
Created on Tue Jun  5 21:16:41 2018

@author: Administrator
"""
#%%
import os
import glob
from ..origin import Shell_script

#%%
class Bone(Shell_script):
    #作用原理：这是其他计算类的父类
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'' #每一个子类会根据子类的名字，赋不同的值
    def __init__(self,input_list):
        print('input_list:',input_list)
        if len(input_list) != 2 :
            raise Exception("the number of elements of input_list is not equal to 3")
        super().__init__(input_list)
        
    def initialize_input_list(self,input_list):
        
        #test if the input_list has four parameters
        ##########################################################################重新整理传入参数
        self.group_dirpath = input_list[0]
        self.output_dirpath = input_list[1]
        
    def concat_inputs(self):
        print('search_path:',self.group_dirpath+self.os_sep+self.star+self.suffix) 
        self.group_filepaths = glob.glob(self.group_dirpath+self.os_sep+self.star+self.suffix)
        self.group_filepaths.sort()
        print('group_filepaths:',self.group_filepaths)
        
        self.fileamount = len(self.group_filepaths)
        
        #the code below is used to concatenate all the filepath into one string which will be used as parameter by the '3dTcat' command
        self.group_filepaths_str = ''.join([i + self.space  for i in self.group_filepaths])
        
        # the two parameters bolow is used to label the concatenated nii file
        self.group_label_str = os.path.split(os.path.split(self.group_filepaths[0])[0])[1]
        print('self.group_label_str:',self.group_label_str)
        
        self.output_dirpath = self.output_dirpath + self.os_sep + self.group_label_str + self.tag_str
        if not os.path.exists( self.output_dirpath):
            os.makedirs( self.output_dirpath)
        self.group_all_filepath = self.output_dirpath  + self.os_sep + self.group_label_str + self.tag_str + self.suffix
        print(r'self.group_all_filepath:',self.group_all_filepath)


class FourD_Concat(Bone):
    #作用原理：将多个3D的nii文件连成一个4D的nii文件。
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_concat'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dTcat -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%
class Multi_mean(Bone):
    #作用原理：求多个3D的nii的mean
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_mean'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dMean -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%
class Multi_sum(Bone):
    #作用原理：求多个3D的nii的sum
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_sum'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dMean -sum -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%
class Multi_std(Bone):
    #作用原理：求多个3D的nii的std
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_std'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dMean -sd -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%
class Multi_union(Bone):
    #作用原理： 
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_mask-union'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dMean -mask_union -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%

class Multi_inter(Bone):
    #作用原理：
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_mask-inter'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dMean -mask_inter -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1

#%%

class Tstat_mean(Bone):
    #作用原理：
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    tag_str = r'_mask-inter'
    def concat_script(self):
        #特有的文件路径
        
        #cmd_1的内容：3dTcat -prefix   
        self.cmd_1 =  r'3dTstat  -prefix ' + self.group_all_filepath + self.space + self.group_filepaths_str 
        
        self.shell_script = self.cmd_1